package whsw.tool;

import com.sun.istack.internal.NotNull;

import java.util.List;

/**
 * 方便一个包含一个类的集合用表格的形式打印出来
 * 通常要输出的二维表格信息, 都是某种同一类对象的集合
 *
 * 为了简化解析的过程, 让需要打印成二维表格的类实现此接口
 *
 * @author flutterdash@qq.com
 * @since 2021/6/20 15:48
 */
public interface TableInfo {

    /**
     * 返回 Bean 类的字段描述
     * 这个方法返回的列表最终会做为二维表格的标题, 在第一行显示
     *
     * @return 返回类的字段描述
     */
    @NotNull
    List<String> getTitle();

    /**
     * 返回 Bean 对象的字段值信息
     * 顺序以及长度都要与 #getTitle() 方法一致
     *
     * @return 返回对象的属性描述
     */
    @NotNull
    List<String> toRecord();

    static void checkForConsistency(List<String> title, List<String> record) {
        if (title == null || record == null)
            // 查看 #getTitle 和 #toRecord 的方法描述
            throw new NullPointerException();
        if (record.size() > title.size())
            // 查看 #toRecord 的方法描述
            throw new IllegalArgumentException("record()方法返回的列表长度需要和getTitle()方法返回的列表长度一致");
    }

}
